// custom_handle.h
#ifndef CUSTOM_HANDLE_H
#define CUSTOM_HANDLE_H

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include "modbus.h"
#include <sys/ipc.h>
#include <sys/shm.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/msg.h>
#include "cJSON.h"
#include "shmem.h"
#include "msg_queue_peer.h"

union val_t
{ 
    int b_val;  //bool类型存储空间
    int i_val;   //整形值存储空间
    float f_val;  //浮点值存储空间
};

// 共享内存数据结构体类型
struct std_node
{
    int key;  //唯一键值
    int type;  //数据点类型
    int dev_type;  //数据点属于哪个设备，根据网关支持的设备自行定义
    union val_t old_val;  //变化上报后需要更新旧值
    union val_t new_val;  //从共享内存取出最新数据，放到new_val中
    int ret;  //默认为-1，采集成功后设置为0，采集失败再置-1
};

// 消息队列结构体类型
struct control 
{
    long type;
    int key;
    union val_t val;
};

char* init_shared_memory(void);  // 移除extern，默认全局可见
int parse_and_process(int sock, const char *query_string, const char *input);
int handle_set_data(int sock, cJSON *data); // 添加handle_set_data函数声明

#endif  // CUSTOM_HANDLE_H